Completed
Push — master ( 5cd775...78bef9 )
by Jonathan
14:29 queued 04:27
created

edit.js ➔ autoDisplayApiCapabilities   A

Complexity

Conditions 3
Paths 2

Size

Total Lines 8
Code Lines 5

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 3
eloc 5
nc 2
nop 0
dl 0
loc 8
rs 10
c 0
b 0
f 0
1
export class Edit {
2
    constructor() {
3
        this.intiSwitchListener()
4
        this.initCheckboxListener()
5
        this.autoCheck()
6
        this.autoDisplayApiCapabilities()
7
    }
8
9
    intiSwitchListener() {
10
        $('#manage-api-capabilities').on('change', (event) => {
11
            let element = $(event.currentTarget)
12
13
            if (element.is(':checked')) {
14
                $("#permissions-table .for-api").removeClass('hide')
15
            } else {
16
                $("#permissions-table .for-api").addClass('hide')
17
            }
18
        })
19
    }
20
21
    initCheckboxListener() {
22
        // Select all checkbox
23
        $('#permissions-table input.select-all').on('change', (event) => {
24
            let element = $(event.currentTarget)
25
26
            if (element.is(':checked')) {
27
                $("#permissions-table input[type='checkbox']").prop('checked', true)
28
            } else {
29
                $("#permissions-table input[type='checkbox']").prop('checked', false)
30
            }
31
32
            this.autoCheck()
33
        })
34
35
        // Select row checkboxes
36
        $('#permissions-table input.select-row').on('change', (event) => {
37
            let element = $(event.currentTarget)
38
            let parentElement = $(element).parents('tr:first')
39
40
            if (element.is(':checked')) {
41
                $(".select-item", parentElement).prop('checked', true)
42
            } else {
43
                $(".select-item", parentElement).prop('checked', false)
44
            }
45
46
            this.autoCheck()
47
        })
48
49
        // Select item checkboxes
50
        $('#permissions-table input.select-item').on('change', (event) => {
51
            let element = $(event.currentTarget)
52
            let parentElement = $(element).parents('tr:first')
0 ignored issues
show
Unused Code introduced by
The variable parentElement seems to be never used. Consider removing it.
Loading history...
53
54
            this.autoCheck()
55
        })
56
    }
57
58
    autoCheck() {
59
        // All modules
60
        let globalCheckedCount = $("#permissions-table .select-item:checked").length
61
        let globalTotalCount = $("#permissions-table .select-item").length
62
        $("#permissions-table .select-all").prop('checked', globalCheckedCount === globalTotalCount)
63
64
        // Each row
65
        $("#permissions-table tbody tr").each((index, el) => {
66
            let rowElement = $(el)
67
            let rowCheckedCount = $(".select-item:checked", rowElement).length
68
            let rowTotalCount = $(".select-item", rowElement).length
69
            $(".select-row", rowElement).prop('checked', rowCheckedCount === rowTotalCount)
70
        })
71
    }
72
73
    autoDisplayApiCapabilities() {
74
        let globalApiTotalCount = $("#permissions-table td.for-api input.select-item").length
75
        let globalApiCheckedCount = $("#permissions-table td.for-api input.select-item:checked").length
76
77
        if (globalApiCheckedCount > 0 && globalApiTotalCount !== globalApiCheckedCount) {
78
            $('#manage-api-capabilities').prop('checked', true).change()
79
        }
80
    }
81
}